import exp from "constants";

// 匹配views里面所有的.vue文件
const modules = import.meta.glob("../views/**/*.vue");

export const loadView = (view) => {
  let res;
  for (const path in modules) {
    const dir = path.split("views/")[1].split(".vue")[0];
    if (dir === view) {
      res = () => modules[path]();
    }
  }
  return res;
};

/**
 * 过滤路由的方法
 * @param {*} data
 * @returns
 */
export const filterRoute = (data) => {
  data.forEach((item) => {
    if (item.children?.length > 0) {
      delete item.component;
      filterRoute(item.children);
    } else {
      item.component = loadView(item.component);
    }
  });
  return data;
};

/**
 *
 * 根据用户角色比对路由权限的方法
 * @param {*} roleType 用户角色
 * @param {*} allAsyncRouter 项目中配置的所有的异步路由
 *
 */
export const filterAsyncRoterArr = (roleType, allAsyncRouter) => {
  //真正需要渲染的根据用户角色过滤后的路由
  let realRouterArr = [];
  allAsyncRouter.forEach((item) => {
    if (item.meta.roleType.includes(roleType)) {
      //一级菜单有权限,在判断子元素
      if (item.children && item.children.length > 0) {
        //递归对比子元素
        item.children = filterAsyncRoterArr(roleType, item.children);
      }
      realRouterArr.push(item);
    }
  });

  return realRouterArr;
};

/**
 * 指定一级路由跳转的默认子路由的路径
 * @param {*} routes
 */
export const setDefaultRoute = (routes) => {
  routes.forEach((item) => {
    if (item.children && item.children.length > 0) {
      item.redirect = { name: item.children[0].rouePath };
      setDefaultRoute(item.children);
    }
  });
};
